<?php

/** 
* 
* 
* by:南宁火蝶科技有限公司 http:///www.HdsysCms.com
* 声明:本系统禁止用二次开发、侵犯HdsysCms著作和除去HdsysCms进行售卖,如发现将追究一切权利,模版制作属于自己所得可以通过本系统对外开发模版获取收益!
* 
* 2019年第一版本发布 - 到2023.9.1开源使用! 
* php混淆工具:phpencry.wbox.top
* 
* 注意防骗:@HdsysCms 官方没授权任何个人机构合作,唯一收款抬头:《南宁火蝶科技有限公司》和官网显示客服唯一渠道客服,其它渠道以HdsysCms名义行为均骗子!
*
*/
	

ini_set('max_execution_time', '100');
if (!isset($_POST['type'])) {
call_my_echo_exit('访问类型错误');
}
if (!isset($_POST['token'])) {
call_my_echo_exit('访问错误');
}
$param_get_token=$_POST['token'];
if ($param_get_token=='') call_my_echo_exit('token 错误!');
if (!isset($_POST['md5'])) {
call_my_echo_exit('md5访问错误');
}
$param_get_md5=$_POST['md5'];
if ($param_get_md5=='') call_my_echo_exit('md5 错误!');
$param_file='../../LibHdSys/common/veesion.function.php';
if (!file_exists($param_file)) {
call_my_echo_exit('开发版本无法执行当前页面功能.');
}
include($param_file);
defined('HDSYS_VERSION') or call_my_echo_exit('版本参数验证错误 HDSYS_VERSION');
defined('HDSYS_VERSION_ID') or call_my_echo_exit('版本参数验证错误 HDSYS_VERSION_ID');
defined('HDSYS_VERSION_TIME') or call_my_echo_exit('版本参数验证错误 HDSYS_VERSION_TIME');
if (!class_exists('ZipArchive')) {
echo 'ZipArchive 函数不支持自动更新，无非解压zip';
exit;
}
include('../../Data/Sql.Config.php');
defined('DBSQLTYPE') or call_my_echo_exit('页面参数错误');
defined('DBSQLITEFILE') or call_my_echo_exit('页面参数错误');
defined('DBHOST') or call_my_echo_exit('页面参数错误');
defined('DBUSER') or call_my_echo_exit('页面参数错误');
defined('DBPASS') or call_my_echo_exit('页面参数错误');
defined('DBTABLE') or call_my_echo_exit('页面参数错误');
defined('DBQIANHUAN') or call_my_echo_exit('页面参数错误');
if (!isset($_COOKIE['key']) or $_COOKIE['key']=='') call_my_echo_exit('签名key验证失败.');
$param_key=md5($_SERVER['DOCUMENT_ROOT'] . $_COOKIE["" . 'key']);
if ($param_key !=$param_get_md5) {
call_my_echo_exit('md5 验证失败!');
}
$param_hdsyscms="" . 'hdsyscms';
$param_sha1_token=sha1(sha1($_COOKIE["" . 'key'] . DBSQLTYPE . DBSQLITEFILE . DBHOST . DBUSER . DBPASS . DBTABLE . DBQIANHUAN . $param_hdsyscms));
if ($param_get_token !=$param_sha1_token) {
call_my_echo_exit('token 验证失败!');
}
call_my_echo_log('token验证通过');
call_my_echo_log('更新内容不涉及数据库和 Data install cache upfiles templates 目录更新,只涉及文件更新.');
$param_server_url="" . 'https' . '://' . "" . 'subscribe' . '.' . "" . 'hdsyscms' . '.' . "" . 'com/' .  "" . 'authorization' . '/' .  "" . 'Plug' . '/' .  "" . 'Version/' .  "" . 'v1' . '.' . 'php' . '?' . 'daihao' . '=' . '10000' . '&' . 'type=%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0&v=' . HDSYS_VERSION;
$paran_get_data=file_get_contents($param_server_url);
if ($paran_get_data=='') call_my_echo_exit('获取更新服务失败.链接更新服务器失败!');
$param_josn=json_decode($paran_get_data, 1);
if (!$param_josn) {
call_my_echo_exit('服务器信息解析失败! error:' . $paran_get_data);
}
$param_new_v=$param_josn['v'];
if ($param_josn['code']==800) {
call_my_echo_log('更新包已经是最新版本 提示:' . $param_josn['msg']);
call_my_echo_log('执行结束');
exit;
}
call_my_echo_log('版本验证有更新');
call_my_echo_log('服务器信息比对完成');
call_my_echo_log('服务器版本号:' . $param_new_v);
call_my_echo_log('更新时间:' . $param_josn['time']);
call_my_echo_log('更新说明:' . $param_josn['upinfo']);
call_my_echo_log('更新包MD5:' . $param_josn['md5']);
call_my_echo_log('本地版本号:' . HDSYS_VERSION);
if ($param_josn['url']=='') call_my_echo_exit('更新URL空的.');
call_my_echo_log('开始下载');
$param_down_url=$param_josn['url'];
$param_filesavename='../../cache/up_' . $param_josn['md5'] . '.zip';
$param_data=downFile($param_down_url, $param_filesavename);
if (!$param_data) {
call_my_echo_exit('下载Zip更新资源失败.');
}
call_my_echo_log('下载完成');
$param_md5=md5_file($param_filesavename);
if ($param_md5 !=$param_josn['md5']) {
call_my_echo_exit('下载更新包MD5验证失败.');
}
call_my_echo_log('更新包MD5验证完成');
$param_zip=new ZipArchive();
$param_opens=$param_zip->open($param_filesavename);
if (!$param_opens) {
call_my_echo_exit("打开Zip文件失败");
}
$param_isok=0;
$param_isok2=1;
for ($i=0; $i < $param_zip->numFiles; $i++) {
$param_stat=$param_zip->statIndex($i);
if ($param_stat['name']=='Data/Sql.Config.php') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了Data/Sql.Config.php文件<br/>';
}
if ($param_stat['name']=='install/index.php') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了install/index.php文件<br/>';
}
if ($param_stat['name']=='cache/') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了cache/目录<br/>';
}
if ($param_stat['name']=='Data/') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了Data/目录<br/>';
}
if ($param_stat['name']=='upfiles/') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了upfiles/目录<br/>';
}
if ($param_stat['name']=='templates/') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了templates/目录<br/>';
}
if ($param_stat['name']=='install/') {
$param_isok2=0;
echo '检测到更新压缩包异常,Zip压缩包包含了install/目录<br/>';
}
if ($param_stat['name']=='LibHdSys/common/veesion.function.php') {
$param_isok=1;
}
}
if ($param_isok==0) {
call_my_echo_exit('更新压缩包异常');
}
if ($param_isok2==0) {
call_my_echo_exit('检测到更新压缩包异常,检测更新多余目录删除.');
}
$param_zip_file="../../cache/zip_hdsyscms_v_{$param_new_v}/";
$param_zip->extractTo($param_zip_file, array('LibHdSys/common/veesion.function.php'));
$param_file=$param_zip_file . 'LibHdSys/common/veesion.function.php';
if (!file_exists($param_file)) {
call_my_echo_exit('解压文件验证版本失败，解压失败');
}
$param_josn=file_get_contents($param_file);
if (strpos($param_josn, $param_new_v) <=0) {
call_my_echo_exit('安装包版本号[' . $param_new_v . ']验证失败，与更新比对版本不一致.');
}
$param_extractTo=$param_zip->extractTo('../../');
$param_zip->close();
call_my_echo_log('更新完成');
call_my_echo_log('请刷新浏览器');
function call_my_echo_log($param_a)
{
echo '>>>>>>>>' . $param_a . PHP_EOL;
}
function call_my_echo_exit($param_a)
{
echo '>>>>>>>> ERROR:' . $param_a . PHP_EOL;
echo  '>>>>>>>> Q:终止更新,联系客服解决' . PHP_EOL;
exit();
}
function downFile($param_url, $savePath)
{
$param_ch=curl_init();
curl_setopt($param_ch, CURLOPT_URL, $param_url);
curl_setopt($param_ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($param_ch, CURLOPT_HEADER, TRUE);
curl_setopt($param_ch, CURLOPT_NOBODY, FALSE);
curl_setopt($param_ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($param_ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($param_ch, CURLOPT_REFERER, 'https://www.hdsyscms.com/download.html');
$param_response=curl_exec($param_ch);
$param_body='';
if (curl_getinfo($param_ch, CURLINFO_HTTP_CODE)=='200') {
$param_headerSize=curl_getinfo($param_ch, CURLINFO_HEADER_SIZE);
$param_body=substr($param_response, $param_headerSize);
}
curl_close($param_ch);
if (file_put_contents($savePath, $param_body)) {
return true;
}
return false;
}
function Zip($param_source, $param_destination)
{
if (!extension_loaded('zip') || !file_exists($param_source)) {
return false;
}
$param_zip=new ZipArchive();
if (!$param_zip->open($param_destination, ZIPARCHIVE::CREATE)) {
return false;
}
$param_source=str_replace('\\', '/', realpath($param_source));
if (is_dir($param_source)===true) {
$param_files=new RecursiveIteratorIterator(new RecursiveDirectoryIterator($param_source), RecursiveIteratorIterator::SELF_FIRST);
foreach ($param_files as $param_file) {
$param_file=str_replace('\\', '/', $param_file);
if (in_array(substr($param_file, strrpos($param_file, '/') + 1), array('.', '..')))
continue;
$param_file=realpath($param_file);
if (is_dir($param_file)===true) {
$param_zip->addEmptyDir(str_replace($param_source . '/', '', $param_file . '/'));
} else if (is_file($param_file)===true) {
$param_zip->addFromString(str_replace($param_source . '/', '', $param_file), file_get_contents($param_file));
}
}
} else if (is_file($param_source)===true) {
$param_zip->addFromString(basename($param_source), file_get_contents($param_source));
}
return $param_zip->close();
}
function call_my_chr($param_CALL_A)
{
return chr($param_CALL_A);
}
